using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Threading;
using DAO;
using DTO;
using System.Windows.Forms;


namespace Presentation
{
    public partial class UserControlHoadonmua : UserControl
    {
        // autocomplete source for Ten thuoc
        private readonly AutoCompleteStringCollection _namesCollection = new AutoCompleteStringCollection();
        //auto complete source for cty nhaph hang
        private readonly AutoCompleteStringCollection _ctynhaphangCollection = new AutoCompleteStringCollection();
        public List<DuocPhamDto> Dp = new List<DuocPhamDto>();
        //save all duocpham for autocomplete
        private Hashtable _hashDp = new Hashtable();
        //save all cong ty nhap hang for autocomplete
        private readonly Hashtable _hashCtynhaphang = new Hashtable();
        public UserControlHoadonmua()
        {
            InitializeComponent();
        }

        
        private void LoadDonViThuoc()
        {
            cmbDonvi.Items.Insert(0, "-----------------------");
            DonViDuocPhamDao dvdao = new DonViDuocPhamDao();
            DonViDuocPhamDto[] temp = dvdao.SelectAll();
            if (temp.Length > 0)
            {
                for (int i = 0; i < temp.Length; i++)
                    cmbDonvi.Items.Insert(i + 1, temp[i]);
            }
            //cmbDonvi.Items.Insert(cmbDonvi.Items.Count, "Khác");
            cmbDonvi.DisplayMember = "TenDonVi";
            cmbDonvi.ValueMember = "ID";
        }
        private void LoadLoaiThuoc()
        {
            cmbLoaihang.Items.Insert(0, "-----------------------");
            LoaiduocphamDao dpdao = new LoaiduocphamDao();
            LoaiDuocPhamDto[] dpdto = dpdao.SelectAll();
            if (dpdto.Length > 0)
            {
                for (int i = 0; i < dpdto.Length; i++)
                    cmbLoaihang.Items.Insert(i+1, dpdto[i]);
            }
          
            //cmbLoaihang.Items.Insert(cmbLoaihang.Items.Count, "Khác");
            cmbLoaihang.DisplayMember = "TenLoaiDuocPham";
            cmbLoaihang.ValueMember = "ID";
        }
       
       
        private void UserControlHoadonmua_Load_1(object sender, EventArgs e)
        {
            try
            {
                LoadDonViThuoc();
                LoadLoaiThuoc();
                //for loading ten thuoc
                //DuocPhamDao dpDao = new DuocPhamDao();
                _hashDp = DuocPhamDao.SelectAllByHash();
                foreach (string key in _hashDp.Keys)
                {
                    _namesCollection.Add(key.ToUpper());

                }
                txtTenthuoc.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                txtTenthuoc.AutoCompleteSource = AutoCompleteSource.CustomSource;
                txtTenthuoc.AutoCompleteCustomSource = _namesCollection;
                //for loading ten cty
                CongTyNhapHangDao congTyNhapHangDao = new CongTyNhapHangDao();
                CongTyNhapHangDto[] arrCty = congTyNhapHangDao.SelectAll();
                foreach (CongTyNhapHangDto cty in arrCty)
                {
                    _ctynhaphangCollection.Add(cty.TenCongTy);
                    _hashCtynhaphang.Add( cty.TenCongTy.ToLower(), cty.Id);
                }
                txtCongtynhaphang.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                txtCongtynhaphang.AutoCompleteSource = AutoCompleteSource.CustomSource;
                txtCongtynhaphang.AutoCompleteCustomSource = _ctynhaphangCollection;
                //end loading ten thuoc
                txtTennhanvien.Text = FrmDangNhap.ten;
                txtNgay.Text = DateTime.Now.ToShortDateString();

            }
            catch (Exception exp)
            {
                if (exp.Message.Contains("already opened exclusively by another user, or it is already open through the user interface"))
                {
                    MessageBox.Show("Vui lòng tắt chương trình Access vì xảy ra đụng độ kết nối dữ liệu, xin cảm ơn",
                                    "Báo lỗi");
                }else
                {
                    throw new Exception(exp.ToString());    
                }
            }
        }

       
        private void btnDongy_Click(object sender, EventArgs e)
        {
            try
            {
                if(txtTenthuoc.Text=="")
                {
                    lblError.Text = "Bạn chưa nhập tên thuốc";
                    return;
                }
                if (txtNoisanxuat.Text == "")
                {
                    lblError.Text = "Bạn chưa nhập nơi sản xuất";
                    return;
                }
                try
                {
                    int.Parse(txtGianhap.Text);
                }
                catch 
                {
                    lblError.Text = "Bạn nhập giá nhập chưa đúng";
                    return;
                }
                try
                {
                    int.Parse(txtGiaXuat.Text);
                }
                catch
                {
                    lblError.Text = "Bạn nhập giá xuất chưa đúng";
                    return;
                }
                try
                {
                    int.Parse(txtSoluong.Text);
                }
                catch
                {
                    lblError.Text = "Bạn nhập số lượng chưa đúng";
                    return;
                }
                if (txtCongtynhaphang.Text == "")
                {
                    lblError.Text = "Bạn chưa nhập tên công ty ";
                    return;
                }
                if (txtSolo.Text == "")
                {
                    lblError.Text = "Bạn chưa nhập số lô";
                    return;
                }
                lblError.Text = "";
                string tenthuoc = txtTenthuoc.Text.ToUpper();
                string[] temp = tenthuoc.Split(new char[]{'-'} );
                if(temp.Length>1)
                {
                    tenthuoc=temp[0];
                }
                DateTime ngaysanxuat = DateTime.Parse(dtpNgaysanxuat.Text);
                DateTime hansudung = DateTime.Parse(dtpHansudung.Text);
                string noisanxuat = txtNoisanxuat.Text;
                //string loaihang = cmbLoaihang.SelectedItem.ToString();
                float gianhap = float.Parse(txtGianhap.Text);
                float giaxuat = float.Parse(txtGiaXuat.Text);
                int soluong = int.Parse(txtSoluong.Text);
                string ctynhaphang = txtCongtynhaphang.Text;
                string solo = txtSolo.Text;
                
                DuocPhamDto dpdto = new DuocPhamDto();
                if (_hashDp.ContainsKey(txtTenthuoc.Text.ToLower()))
                {
                    dpdto.Id = ((DuocPhamDto) _hashDp[txtTenthuoc.Text]).Id;
                }
                dpdto.SoLo = solo;
                dpdto.TenDuocPham = tenthuoc;

                dpdto.SoLuongMua = soluong;
                dpdto.SoLuongTonKho += soluong;
                dpdto.SoLuongToiThieu = dpdto.SoLuongTonKho*10/100;
                dpdto.NoiSanXuat = noisanxuat;
                dpdto.Hansudung = hansudung;

                LoaiDuocPhamDto ldpdto = new LoaiDuocPhamDto();
                if ((LoaiDuocPhamDto)cmbLoaihang.SelectedItem != null)
                {
                    ldpdto = (LoaiDuocPhamDto)cmbLoaihang.SelectedItem;
                }
                else
                {
                    ldpdto.TenLoaiDuocPham = cmbLoaihang.Text;
                }
                dpdto.LoaiDuocPham = ldpdto;
                CongTyNhapHangDto ctdto = new CongTyNhapHangDto();
                if(_hashCtynhaphang.ContainsKey(txtCongtynhaphang.Text.ToLower()))
                {
                    ctdto.Id = (int) _hashCtynhaphang[txtCongtynhaphang.Text.ToLower()];
                }
                ctdto.TenCongTy = ctynhaphang;
                dpdto.CongTyNhapHang = ctdto;

                DonViDuocPhamDto donViDuocPhamDto = new DonViDuocPhamDto();
                if ((DonViDuocPhamDto)cmbDonvi.SelectedItem != null)
                {
                    donViDuocPhamDto = (DonViDuocPhamDto)cmbDonvi.SelectedItem;
                }
                else
                {
                    donViDuocPhamDto.TenDonVi = cmbDonvi.Text;
                }
                dpdto.DonViDuocPham = donViDuocPhamDto;

                dpdto.GiaNhap = gianhap;
                dpdto.GiaXuat = giaxuat;
                dpdto.Ngaysanxuat = ngaysanxuat;
                dpdto.ThanhTien = gianhap*dpdto.SoLuongMua;
                dpdto.MaDuocPham = txtMaduocpham.Text;

                Dp.Add(dpdto);
                dgvHoadonmua.AutoGenerateColumns = false;
                dgvHoadonmua.DataSource = null;
                dgvHoadonmua.DataSource = Dp;

                float sum = 0;
                for(int i=0;i<dgvHoadonmua.Rows.Count;i++)
                {
                    sum = sum + float.Parse(dgvHoadonmua.Rows[i].Cells[5].Value.ToString());
                }
                txtTongtien.Text = Utils.GetNumeric(sum);
                ResetFields();
            }
            catch (Exception exp)
            {
                throw new Exception(exp.ToString());
            }
        }

       private void txtVat_TextChanged(object sender, EventArgs e)
        {
            try
            {
                float sum = 0;
                try
                {
                    int.Parse(txtVat.Text);
                }
                catch 
                {
                    MessageBox.Show("Bạn nhập VAT không đúng");
                    return;
                }
                
                if (int.Parse(txtVat.Text) == 0)
                    sum = float.Parse(txtTongtien.Text);
                else
                {
                    sum = float.Parse(txtTongtien.Text) + float.Parse(txtTongtien.Text) * float.Parse(txtVat.Text) / 100;
                    txtThanhtien.Text = Utils.GetNumeric(sum);
                }
            }
            catch (Exception exp)
            {
                throw new Exception(exp.ToString());
            }
        }

        private void btnIn_Click(object sender, EventArgs e)
        {
            try
            {
                if(txtVat.Text=="")
                {
                    lblError.Text = "Bạn chưa nhập thuế VAT";
                    return;
                }
                const int loaihd = (int) MyConnection.Loaihoadon.Hoadonmua;
                HoadonmuaDto hddto = new HoadonmuaDto();
                hddto.NgayTao = DateTime.Parse(txtNgay.Text);
                hddto.TongTien = float.Parse(txtTongtien.Text);
                hddto.Vat = float.Parse(txtVat.Text);
                hddto.Sotienthanhtoan = float.Parse(txtThanhtien.Text);
                hddto.LoaiHd = loaihd;
                hddto.MaNhanVien = FrmDangNhap.manhanvien;
           
                HoaDonMuaDao hddao = new HoaDonMuaDao();
                Hashtable hashtableDp = new Hashtable();
                foreach ( DuocPhamDto item in Dp)
                {
                    //hashtableDp.Add(item.MaDuocPham,item);
                    hashtableDp.Add(item.GetHashCode(), item);
                    
                }
                hddto.Duocpham = hashtableDp;
                hddao.SaveOrUpdate(hddto);

                MessageBox.Show("Đã lưu hóa đơn thành công", "Thành công");
            }
            catch (Exception exp)
            {
                throw new Exception(exp.ToString());
            }
        }


        private void ResetFields()
        {
            txtTenthuoc.Text = "";
            txtMaduocpham.Text = "";
            txtNoisanxuat.Text = "";
            txtSoluong.Text = "";
            txtSolo.Text = "";
            txtCongtynhaphang.Text = "";
            txtGiaXuat.Text = "";
            txtGianhap.Text = "";
            cmbLoaihang.SelectedIndex = 0;
            cmbDonvi.SelectedIndex = 0;
        }

        private void txtTenthuoc_TextChanged(object sender, EventArgs e)
        {
            if (_hashDp.ContainsKey(txtTenthuoc.Text.ToUpper()))
            {
                DuocPhamDto dp = (DuocPhamDto)_hashDp[txtTenthuoc.Text.ToUpper()];
                txtMaduocpham.Text = dp.MaDuocPham;
                txtNoisanxuat.Text = dp.NoiSanXuat;
                txtGianhap.Text = dp.GiaNhap.ToString();
                txtGiaXuat.Text = dp.GiaXuat.ToString();
                txtSoluong.Text = dp.SoLuongMua.ToString();
                txtCongtynhaphang.Text = dp.CongTyNhapHang.TenCongTy;
                cmbDonvi.Text = dp.DonViDuocPham.TenDonVi;
                cmbLoaihang.Text = dp.LoaiDuocPham.TenLoaiDuocPham;
            }
            return;
        }

      

       
    }
}
